package com.chen.pfm.event;

import com.chen.pfm.entity.Account;
import com.chen.pfm.entity.ResultVo;
import com.chen.pfm.utils.AccountDBUtil;
import com.chen.pfm.utils.HttpRequestUtil;
import com.chen.pfm.utils.MyToast;
import com.chen.pfm.utils.MyUtil;
import com.google.gson.Gson;
import ohos.aafwk.ability.DataAbilityRemoteException;
import ohos.app.Context;
import ohos.app.dispatcher.TaskDispatcher;
import ohos.app.dispatcher.task.TaskPriority;
import ohos.eventhandler.EventHandler;
import ohos.eventhandler.EventRunner;
import ohos.eventhandler.InnerEvent;
import ohos.hiviewdfx.HiLog;
import ohos.hiviewdfx.HiLogLabel;
import ohos.utils.zson.ZSONArray;
import ohos.utils.zson.ZSONObject;

import java.util.List;

public class MyEventHandler extends EventHandler {
    /**
     * 日志
     */
    static final HiLogLabel LABEL = new HiLogLabel(3, 0xD001100, "MyEventHandler");
    public MyEventHandler(EventRunner runner) throws IllegalArgumentException {
        super(runner);
    }
    /**
     * 1. 创建 EventHandler 的子类，在子类中重写实现方法 processEvent()来处理事件
     *
     * @param event
     */
    @Override
    protected void processEvent(InnerEvent event) {
        super.processEvent(event);
        if (event == null) {
            return;
        }
        switch (event.eventId) {
            case 1001:
                //得到分类资源
                HiLog.info(LABEL, " 分类资源资源已经加载完成--->" + 1001);
                break;
            case 1002:
                //得到账单资源
                HiLog.info(LABEL, "账单资源资源已经加载完成 --->" + 1002);
                break;
            case 1003:
                //得到报表资源
                HiLog.info(LABEL, "报表资源资源已经加载完成 --->" + 1003);
                break;
            default:
                break;
        }
    }


    /**
     * EventHandler 投递 InnerEvent 事件
     */
    private void initInnerEvent() {
        //2. 创建 EventRunner, create()的参数是 true 时，则为托管模式
        EventRunner runner = EventRunner.create(true);

        if (runner == null) {
            return;
        }
        //3. 创建 EventHandler 子类的实例。
        MyEventHandler myHandler = new MyEventHandler(runner);

        //4. 获取 InnerEvent 事件。

        InnerEvent event1 = InnerEvent.get(1001);
        InnerEvent event2 = InnerEvent.get(1002);
        InnerEvent event3 = InnerEvent.get(1003);

        //5. 投递事件，投递的优先级以 IMMEDIATE 为例，延时选择 0ms 和 2ms。
        myHandler.sendEvent(event1, 0, EventHandler.Priority.IMMEDIATE);
        myHandler.sendEvent(event2, 1, EventHandler.Priority.IMMEDIATE);// 延时 2ms 后立即处理
        myHandler.sendEvent(event3, 2, EventHandler.Priority.IMMEDIATE);

//        //6. 启动和停止 EventRunner，如果为托管模式，则不需要此步骤。
//        runner.run();
//        //待执行操作
//        // ... 执行业务逻辑
//        // 停止 EventRunner
//        runner.stop();

    }
    /**
     * EventHandler 投递 Runnable 任务
     */
    private void initRunnable() {
        //2. 创建 EventRunner，create()的参数是 true 时，则为托管模式
        EventRunner runner = EventRunner.create(true);

        if (runner == null) {
            return;
        }
        //3. 创建 EventHandler 子类的实例。
        MyEventHandler myHandler = new MyEventHandler(runner);

        //2. 创建 Runnable 任务。
        Runnable task1 = new Runnable() {
            @Override
            public void run() {
                HiLog.info(LABEL, "task1 running");
            }
        };
        Runnable task2 = new Runnable() {
            @Override
            public void run() {
                HiLog.info(LABEL, "task1 running");
            }
        };

        //3. 投递 Runnable 任务，投递的优先级以 IMMEDIATE 为例，延时选择 0ms 和 2ms。
        myHandler.postTask(task1, 0, EventHandler.Priority.IMMEDIATE);
        // 延时 2ms 后立即执行
        myHandler.postTask(task2, 2, EventHandler.Priority.IMMEDIATE);

    }
}
